package org.example.pojo;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;

import java.io.Serializable;
import java.util.Date;


@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("user_profile")
public class UserProfile implements Serializable {

    /**
     * 用户ID，主键，自动递增
     */
    @NotNull(message = "[用户ID，主键，自动递增]不能为空")
    @ApiModelProperty("用户ID，主键，自动递增")
    private Integer id;
    /**
     * 微信开放ID，唯一标识
     */
    @NotBlank(message = "[微信开放ID，唯一标识]不能为空")
    @Size(max = 100, message = "编码长度不能超过100")
    @ApiModelProperty("微信开放ID，唯一标识")
    @Length(max = 100, message = "编码长度不能超过100")
    private String openid;
    /**
     * 联系电话
     */
    @Size(max = 20, message = "编码长度不能超过20")
    @ApiModelProperty("联系电话")
    @Length(max = 20, message = "编码长度不能超过20")
    private String phone;
    /**
     * 用户昵称
     */
    @Size(max = 50, message = "编码长度不能超过50")
    @ApiModelProperty("用户昵称")
    @Length(max = 50, message = "编码长度不能超过50")
    private String nickname;
    /**
     * 电子邮箱
     */
    @Size(max = 50, message = "编码长度不能超过50")
    @ApiModelProperty("电子邮箱")
    @Length(max = 50, message = "编码长度不能超过50")
    @Email(message = "邮箱格式不正确")
    private String email;
    /**
     * 就读学校
     */
    @Size(max = 8, message = "编码长度不能超过100")
    @ApiModelProperty("就读学校")
    @Length(max = 100, message = "编码长度不能超过100")
    private Integer school;
    /**
     * 年级
     */
    @Size(max = 20, message = "编码长度不能超过20")
    @ApiModelProperty("年级")
    @Length(max = 20, message = "编码长度不能超过20")
    private Integer grade;
    /**
     * 所学专业
     */
    @Size(max = 50, message = "编码长度不能超过50")
    @ApiModelProperty("所学专业")
    @Length(max = 50, message = "编码长度不能超过50")
    private Integer major;
    /**
     * 背景封面图片URL
     */
    @Size(max = 255, message = "编码长度不能超过255")
    @ApiModelProperty("背景封面图片URL")
    @Length(max = 255, message = "编码长度不能超过255")
    private String coverImage;
    /**
     * 头像图片URL
     */
    @Size(max = 255, message = "编码长度不能超过255")
    @ApiModelProperty("头像图片URL")
    @Length(max = 255, message = "编码长度不能超过255")
    private String avatarUrl;
    /**
     * 性别
     */
    @Size(max = 10, message = "编码长度不能超过10")
    @ApiModelProperty("性别")
    @Length(max = 10, message = "编码长度不能超过10")
    private String gender;
    /**
     * 年龄
     */
    @ApiModelProperty("年龄")
    private Integer age;
    /**
     * 性格描述
     */
    @Size(max = -1, message = "编码长度不能超过-1")
    @ApiModelProperty("性格描述")
    @Length(max = -1, message = "编码长度不能超过-1")
    private String personality;
    /**
     * MBTI人格类型
     */
    @Size(max = 10, message = "编码长度不能超过10")
    @ApiModelProperty("MBTI人格类型")
    @Length(max = 10, message = "编码长度不能超过10")
    private String mbti;
    /**
     * 个人人设描述
     */
    @Size(max = -1, message = "编码长度不能超过-1")
    @ApiModelProperty("个人人设描述")
    @Length(max = -1, message = "编码长度不能超过-1")
    private String persona;
    /**
     * 项目偏向领域
     */
    @Size(max = 100, message = "编码长度不能超过100")
    @ApiModelProperty("项目偏向领域")
    @Length(max = 100, message = "编码长度不能超过100")
    private String projectOrientation;
    /**
     * 个人简介
     */
    @Size(max = -1, message = "编码长度不能超过-1")
    @ApiModelProperty("个人简介")
    @Length(max = -1, message = "编码长度不能超过-1")
    private String introduction;
    /**
     * 认证信息
     */
    @Size(max = -1, message = "编码长度不能超过-1")
    @ApiModelProperty("认证信息")
    @Length(max = -1, message = "编码长度不能超过-1")
    private String certificationInfo;
    /**
     * 创建日期，记录插入时自动设置当前时间
     */
    @ApiModelProperty("创建日期，记录插入时自动设置当前时间")
    @TableField(fill = FieldFill.INSERT)
    private Date createdAt;
    /**
     * 修改日期，记录更新时自动更新为当前时间
     */
    @ApiModelProperty("修改日期，记录更新时自动更新为当前时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updatedAt;


    private String gradeAs;

}


